'''备份是在存储工作中保障信息安全的有效方式,本案例要求编写程序,实现一个具有备份文件与文件夹功能的备份工具'''
import os #导入操作系统接口模块，用于处理文件和目录路径
def file_backups(file_name,path):
    '''备份的文件名'''
    file_back = file_name.split('\\')[-1] # 提取文件名（Windows路径分割）
    '''split('\\')  
作用：用反斜杠 \ 分割文件路径字符串  
示例：  
    'C:\\Users\\doc.txt'.split('\\') → ['C:', 'Users', 'doc.txt']
[-1]  
作用：取分割后列表的最后一个元素（即文件名）  
示例：  
    ['C:', 'Users', 'doc.txt'][-1] → 'doc.txt
    路径结尾带\的情况  
示例：D:\\temp\\ → 分割后为['D:', 'temp', '']  
[-1]会取到空字符串，导致错误  
修复方法：先用rstrip('\\')清理路径  
    file_name.rstrip('\\').split('\\')[-1]'''
    '''判断用户输入的内容是文件还是文件夹'''
    if os.path.isdir(file_name) is not True: # 判断是否为文件
        '''一、核心功能
输入：文件/目录的路径（字符串格式）
输出：布尔值（True 或 False）
作用：  
如果路径存在且是目录 → 返回 True  
路径不存在，或路径是文件/其他类型 → 返回 False
二、代码示例
import os
# 示例1：检查目录
path1 = "/home/user/docs"
print(os.path.isdir(path1))  # 假设此目录存在 → 输出 True
# 示例2：检查文件
path2 = "/home/user/docs/report.txt"
print(os.path.isdir(path2))  # 路径是文件 → 输出 False
# 示例3：路径不存在
path3 = "/home/user/ghost_folder"
print(os.path.isdir(path3))  # 路径不存在 → 输出 False'''
        with open(file_name,mode='r') as file_data: # 只读方式打开源文件
            '''创建新文件,以只读的方式打开'''
            new_path = path+'/'+file_back # 拼接新路径
            with open(new_path,mode='w') as file_back: # 写入方式创建新文件
                '''逐行复制源文件内容到新文件中'''
                for line_content in file_data.readlines(): # 逐行复制
                    file_back.write(line_content)
    '''判断是目录还是文件'''
def judge(back_path,file_path): #judge函数（路径判断）
    if os.path.isdir(file_path) is True: # 判断是否为目录
        '''遍历当前目录下的文件'''
        file_li = os.listdir(file_path) # 获取目录文件列表
        for i in file_li:
            '''拼接文件名称'''
            new_file = file_path + '\\' + i # 拼接子文件路径
            file_backups(new_file,back_path) # 递归处理
        else: # 文件处理分支
            '''是文件'''
            if os.path.exists((file_path)):
                file_backups(file_path,back_path)
            else:
                print('备份的文件不存在!')
                exit()
'''备份目录'''
def backups_catalog():
    '''指定备份的目录'''
    back_path = input('请输入备份的目录:\n') # 获取备份目录
    file_path = input('请输入备份的文件:\n') # 获取备份目标
    '''指定目录不存在'''
    if os.path.exists(back_path) is False:
        os.mkdir(back_path) # 目录不存在时创建
        judge(back_path,file_path) # 执行备份
        print('备份成功!')
        '''指定目录存在'''
    else:
        judge(back_path, file_path)
        print('备份成功!')

if __name__ == '__main__':
    backups_catalog()
